package com.jt.sevrice;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.dao.ItemCatMapper;
import com.jt.dao.UserMapper;
import com.jt.pojo.ItemCat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class ItemCatServiceImpl implements ItemCatService {
    @Autowired
    private ItemCatMapper itemCatMapper;

    public Map<Integer, List<ItemCat>> getMap() {
        Map<Integer, List<ItemCat>> map = new HashMap<>();
        //所有的商品信息
        List<ItemCat> list = itemCatMapper.selectList(null);
        for (ItemCat itemCat : list) {
            Integer parentId = itemCat.getParentId();
            if (map.containsKey(parentId)) {
                List<ItemCat> list1 = map.get(parentId);
                list1.add(itemCat);

            } else {
                List<ItemCat> list2 = new ArrayList<>();
                list2.add(itemCat);
                map.put(parentId, list2);
            }
        }

        return map;
    }
    @Override
    public List<ItemCat> findItemCatList(Integer level) {
        Map<Integer, List<ItemCat>> map = getMap();
        if (level == 1) {
            return map.get(0);
        }
        if (level == 2) {
            return getTwoList(map);
        }
        List<ItemCat> listOne = getTwoList(map);
        for (ItemCat itemCat : listOne) {
            List<ItemCat> children = itemCat.getChildren();
            for (ItemCat child : children) {
                QueryWrapper<ItemCat> queryWrapper = new QueryWrapper();
                queryWrapper.eq("parent_id", child.getId());
                List<ItemCat> itemCatList = itemCatMapper.selectList(queryWrapper);
                child.setChildren(itemCatList);
            }
        }return listOne;
    }



    @Override
    public void updateById(ItemCat itemCat) {
        itemCatMapper.updateById(itemCat);
    }

    @Override
    public void addItem(ItemCat itemCat) {
        itemCat.setStatus(true);
        itemCatMapper.insert(itemCat);
    }

    @Override
    public void deleteItemCat(ItemCat itemCat) {
        if (itemCat.getLevel() == 3) {
            itemCatMapper.deleteById(itemCat.getId());
        }
        if (itemCat.getLevel() == 2) {
            QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("prent_id", itemCat.getId());
            itemCatMapper.delete(queryWrapper);
            itemCatMapper.deleteById(itemCat.getId());
        }
        if (itemCat.getLevel() == 1) {
            QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("parent_id", itemCat.getId());
            List<ItemCat> itemCatList = itemCatMapper.selectList(queryWrapper);
            for (ItemCat cat : itemCatList) {
                QueryWrapper<ItemCat> queryWrapper1 = new QueryWrapper<>();
                queryWrapper1.eq("parent_id", cat.getId());
                itemCatMapper.delete(queryWrapper1);
                itemCatMapper.deleteById(cat.getId());
            }
            itemCatMapper.deleteById(itemCat.getId());
        }
    }


    private List<ItemCat> getTwoList(Map<Integer, List<ItemCat>> map) {
        List<ItemCat> listOne = map.get(0);
        for (ItemCat itemCat : listOne) {
            QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("parent_id", itemCat.getId());
            List<ItemCat> itemCatList = itemCatMapper.selectList(queryWrapper);
            itemCat.setChildren(itemCatList);
        }
        return listOne;
    }
}

//        QueryWrapper queryWrapperOne =new QueryWrapper();
//        queryWrapperOne.eq("parent_id", 0);
//        List<ItemCat> listOne = itemCatMapper.selectList(queryWrapperOne);
//        for (ItemCat itemCatOne : listOne) {
//            QueryWrapper<ItemCat>queryWrapperTwo=new QueryWrapper<>();
//            queryWrapperTwo.eq("parent_id", itemCatOne.getId());
//            List<ItemCat> listTwo = itemCatMapper.selectList(queryWrapperTwo);
//            itemCatOne.setChildren(listTwo);
//            for (ItemCat itemCatTwo : listTwo) {
//                QueryWrapper<ItemCat>queryWrapperThree =new QueryWrapper<>();
//                queryWrapperThree.eq("parent_id", itemCatOne.getId());
//                List<ItemCat> listThree = itemCatMapper.selectList(queryWrapperThree);
//                itemCatTwo.setChildren(listThree);
//
//            }
//        }
//        return listOne;